<!DOCTYPE HTML>
<html lang="en">
	<head>
		<title>Interesting Things around you</title>
		<meta charset="utf-8">
		<style type="text/css">
			body {
				background-color: #ffffff;
				margin: 0px;
				overflow: hidden;
			}

			#info {
				position: absolute;
				top: 0px; width: 100%;
				color: #ffffff;
				padding: 5px;
				font-family:Monospace;
				font-size:13px;
				text-align:center;
			}

			a {
				color: #ffffff;
			}
		</style>
	</head>
	<body>

		<div id="container"></div> 
		<script type="text/javascript">
  		var _gaq = _gaq || [];
  		_gaq.push(['_setAccount', 'UA-17704892-1']);
  		_gaq.push(['_trackPageview']);

  		(function() {
    			var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    			ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  			})();
		</script>

		<script type="text/javascript" src="/js/three.js"></script>
		<script type="text/javascript" src="/js/Plane.js"></script>
		<script type="text/javascript" src="/js/goo.js"> </script>
		<script type="text/javascript">

			var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;

			var camera, scene, renderer;

			var texture_placeholder, wireframe,
			isUserInteracting = false,
			onMouseDownMouseX = 0, onMouseDownMouseY = 0,
			lon = 90, onMouseDownLon = 0,
			lat = 0, onMouseDownLat = 0,
			phi = 0, theta = 0;

			//init();

			function init(photoobj) {

				var container, mesh;

				container = document.getElementById( 'container' );

				camera = new THREE.Camera( 75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );

				scene = new THREE.Scene();

				texture_placeholder = document.createElement( 'canvas' );
				texture_placeholder.width = 128;
				texture_placeholder.height = 128;

				wireframe = new THREE.MeshColorStrokeMaterial( 1, 0xffffff, 0 );

				var context = texture_placeholder.getContext( '2d' );
				context.fillStyle = 'rgba( 200, 200, 200, 1 )';
				context.fillRect( 0, 0, texture_placeholder.width, texture_placeholder.height );

				mesh = new THREE.Mesh( new Plane( 1000, 1000, 5, 5 ), loadTexture(photoobj[0]) );
				mesh.position.z = -500;
				mesh.overdraw = true;
				scene.add( mesh );

				mesh = new THREE.Mesh( new Plane( 1000, 1000, 5, 5 ), loadTexture(photoobj[1]) );
				mesh.position.z = 500;
				mesh.rotation.y = 180 * Math.PI / 180;
				mesh.overdraw = true;
				scene.add( mesh );

				mesh = new THREE.Mesh( new Plane( 1000, 1000, 5, 5 ), loadTexture(photoobj[2]) );
				mesh.position.x = -500;
				mesh.rotation.y = 90 * Math.PI / 180;
				mesh.overdraw = true;
				scene.add( mesh );

				mesh = new THREE.Mesh( new Plane( 1000, 1000, 5, 5 ), loadTexture(photoobj[3]) );
				mesh.position.x = 500;
				mesh.rotation.y = -90 * Math.PI / 180;
				mesh.overdraw = true;
				scene.add( mesh );

				mesh = new THREE.Mesh( new Plane( 1000, 1000, 5, 5 ), loadTexture(photoobj[4]) );
				mesh.position.y = 500;
				mesh.rotation.x = 90 * Math.PI / 180;
				mesh.overdraw = true;
				scene.add( mesh );

				mesh = new THREE.Mesh( new Plane( 1000, 1000, 5, 5 ), loadTexture(photoobj[5]) );
				mesh.position.y = -500;
				mesh.rotation.x = -90 * Math.PI / 180;
				mesh.overdraw = true;
				scene.add( mesh );


				renderer = new THREE.CanvasRenderer();
				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );

				container.appendChild( renderer.domElement );

				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
				document.addEventListener( 'mouseup', onDocumentMouseUp, false );

				document.addEventListener( 'touchstart', onDocumentTouchStart, false );
				document.addEventListener( 'touchmove', onDocumentTouchMove, false );

			}

			function loadTexture( path ) {

				var material = new THREE.MeshBitmapUVMappingMaterial( texture_placeholder );

				var texture = new Image();

				texture.onload = function () {

					material.bitmap = this;
					render();

				};

				texture.src = path;

				return [ material, wireframe ];
			}

			function onDocumentMouseDown( event ) {

				event.preventDefault();

				isUserInteracting = true;

				wireframe.color.setRGBA( 1, 1, 1, 0.2 );

				onPointerDownPointerX = event.clientX;
				onPointerDownPointerY = event.clientY;

				onPointerDownLon = lon;
				onPointerDownLat = lat;

			}

			function onDocumentMouseMove( event ) {

				if ( isUserInteracting ) {

					lon = ( onPointerDownPointerX - event.clientX ) * 0.1 + onPointerDownLon;
					lat = ( event.clientY - onPointerDownPointerY ) * 0.1 + onPointerDownLat;

					render();

				}
			}

			function onDocumentMouseUp( event ) {

				isUserInteracting = false;

				wireframe.color.setRGBA( 1, 1, 1, 0 );

				render();
			}


			function onDocumentTouchStart( event ) {

				if( event.touches.length == 1 ) {

					event.preventDefault();

					onPointerDownPointerX = event.touches[0].pageX;
					onPointerDownPointerY = event.touches[0].pageY;

					onPointerDownLon = lon;
					onPointerDownLat = lat;
				}
			}

			function onDocumentTouchMove( event ) {

				if( event.touches.length == 1 ) {

					event.preventDefault();

					lon = ( onPointerDownPointerX - event.touches[0].pageX ) * 0.1 + onPointerDownLon;
					lat = ( event.touches[0].pageY - onPointerDownPointerY ) * 0.1 + onPointerDownLat;

					render();

				}
			}

			function render() {

				lat = Math.max( - 85, Math.min( 85, lat ) );
				phi = ( 90 - lat ) * Math.PI / 180;
				theta = ( lon + 180 ) * Math.PI / 180;

				camera.target.position.x = 500 * Math.sin( phi ) * Math.cos( theta );
				camera.target.position.y = 500 * Math.cos( phi );
				camera.target.position.z = 500 * Math.sin( phi ) * Math.sin( theta );

				renderer.render( scene, camera );

			}

		</script>
		<script type="text/javascript">
			var geo = google.gears.factory.create('beta.geolocation');
			var lat, lon;

			function getpics(obj) {
				photos = obj.query.results.photo;
				var photourls = [];
				for (var i=0; i < 6; i++)
				{
					var photo = photos[i];
					photourls[i] = 'http://farm' + photo.farm + '.static.flickr.com/' + photo.server + '/' + photo.id + '_' + photo.secret + '_b.jpg';
				}
				init(photourls);
			}

			function updatePosition(position) {
				var scriptelem = document.createElement('script');
				scriptelem.src = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos.search%20where%20has_geo%3D%22true%22%20and%20text%3D%22abstract%22&format=json&diagnostics=true&callback=getpics'
				document.body.appendChild(scriptelem);
				}

			function handleError(positionError) {
				var scriptelem = document.createElement('script');
				scriptelem.src = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos.search%20where%20has_geo%3D%22true%22%20and%20abstract%3D%22happy%22&format=json&diagnostics=true&callback=getpics'
				document.body.appendChild(scriptelem);
				}
			geo.getCurrentPosition(updatePosition, handleError);
		</script>
	</body>
</html>
